python基础十 文件操作
[toc]
#python基础十 文件操作
1.文件操作
1.1 作用
持久化存储
1.2 文件操作总结
f = open(file="文件名字或文件路径",mode="操作模式",encoding="编码")
r 只读
w 清空写
a 追加写
rb 只读字节
wb 清空写字节
ab 追加写字节
r+ 读写
w+ 清空写读
a+ 追加写读
1.3 文件操作
1.3.1 只读文件 --> r
r: 读文本
f = open("test.txt",mode="r",encoding="utf-8")
#参数说明
f 变量名,句柄
open 表示打开文件,通过python向操作系统发送指令
test.txt 表示要操作的文件
mode 指定对文件的操作方式,r表示读取
r 表示读取文件
encoding 指定字符集
⚠️文件读取时只能读一遍
在py同级目录下创建一个文件txt.txt,并写入以下内容
一只奔跑的草泥马
abc
123
1.全部读取 print(f.read())
f = open("txt.txt",mode="r",encoding="utf-8")
print(f.read())
一只奔跑的草泥马
abc
123
2.r模式下按照字符读取 print(f.read(3))
f = open("txt.txt",mode="r",encoding="utf-8")
print(f.read(5))
一只奔跑的
3.读取一行 print(f.readline().strip()) 读取一行默认最后有换行符,需要去掉
f = open("txt.txt",mode="r",encoding="utf-8")
print (f.readline().strip())
一只奔跑的草泥马
4.读取多行,以列表的形式存储 print(f.readlines())
f = open("txt.txt",mode="r",encoding="utf-8")
print (f.readlines())
['一只奔跑的草泥马\n', 'abc\n', '123']
//读取总结
print(f.read()) #全部读取
print(f.read(3)) #模式的r的情况下按照字符读取
print(f.readline().strip()) #读取一行
print(f.readlines()) #读取多行,以列表的形式存储
1.3.2 清空写 --> w
w: 清空写文本
f = open("txt.txt",mode="w",encoding="utf-8")
清空写会把要操作的文件先清空,然后再写入
//w模式打开文件后会清空文件内容
f = open("txt.txt",mode="w",encoding="utf-8")
print (f)
txt.txt文件中的内容会被清空
//写入内容
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
5
txt.txt文件中的内容为如下,并且光标在最开头
呵呵
哈哈
//连续写会从文件最后开始写
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
print (f.write("嘻嘻\n嘿嘿"))
5
5
txt.txt文件中的内容如下,并且光标在最开头
呵呵
哈哈嘻嘻
嘿嘿
//对文件写操作后,需要刷新和关闭文件
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
print (f.write("嘻嘻\n嘿嘿"))
print (f.write("啦啦\n吼吼"))
f.flush()
f.close()
5
5
5
txt.txt文件中的内容如下,并且光标在最开头
呵呵
哈哈嘻嘻
嘿嘿啦啦
吼吼
1.3.3 追加写 --> a
a: 追加写文本
f = open("txt.txt",mode="a",encoding="utf-8")
//追加写文本 只会在同一行追加
f = open("txt.txt",mode="a",encoding="utf-8")
print (f.write("呵呵"))
print (f.write("哈哈"))
print (f.write("嘿嘿"))
txt.txt文件内容如下,并且光标在最开头
呵呵哈哈嘿嘿
1.3.4 只读字节 --> rb
⚠️二进制方式读取文件不能指定字符集
f = open("txt.txt",mode="rb",encoding="utf-8")
print (f.read())
ValueError: binary mode doesn't take an encoding argument
//txt.txt文件中的内容为 呵呵哈哈嘿嘿
f = open("txt.txt",mode="rb")
print (f.read())
b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf'
以上的字节的内容就是 呵呵哈哈嘿嘿
1.3.5 清空写字节 --> wb
1. 字节内容说明b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf' txt.txt的内容是 呵呵哈哈嘿嘿
2. 清空txt.txt文件
3. f.write()括号中只能写字节 b'\xxx'⚠️
f = open("txt.txt",mode="wb")
f.write(b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf')
4.此时txt.txt文件内容如下
呵呵哈哈嘿嘿
1.3.6 追加写字节 --> ab
1. 字节内容说明b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf' 的内容是 呵呵哈哈嘿嘿
2. txt.txt文件内容是 呵呵哈哈嘿嘿
3. f.write()括号中只能写字节 b'\xxx'⚠️
f = open("txt.txt",mode="ab")
f.write(b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf')
4.此时txt.txt文件内容如下,已成功追加
呵呵哈哈嘿嘿呵呵哈哈嘿嘿
1.3.7 读写 --> r+
txt.txt文件内容为 呵呵哈哈嘿嘿
f = open("txt.txt","r+",encoding="utf-8")
a = f.read()
f.write("这是读写")
呵呵哈哈嘿嘿
此时txt.txt文件内容为
呵呵哈哈嘿嘿这是读写
1.3.8 清空写读 --> w+
txt.txt文件内容为 呵呵哈哈嘿嘿
f = open("txt.txt","w+",encoding="utf-8")
print (f.write("清空写读"))
print (f.read())
4
此时txt.txt文件内容如下,并且光标在最后边
清空写读
1.3.9 追加写读 --> a+
txt.txt文件内容为 呵呵哈哈嘿嘿
f = open("txt.txt","a+",encoding="utf-8")
print (f.write("追加写读"))
print (f.read())
此时txt.txt文件内容如下,并且光标在追字前边
呵呵哈哈嘿嘿追加写读
1.4 光标操作
txt.txt内容为 呵呵哈哈嘿嘿
光标操作总结
f = open("txt.txt","r",encoding="utf-8")
f.seek(0,0) #移动到文件头部
f.seek(0,1) #移动到光标当前位置
f.seek(0,2) #移动到文件末尾
f.seek(3) #移动3个字节,根据编码不同决定移动的字节大小
print(f.read())
print(f.tell()) #查看光标 返回的是字节
1.5 with open
with open
1.自动关闭文件
2.可以同时操作多个文件
3.as 起别名
现在有两个文件 t1 t2,t1内容为t1,t2内容为t2
with open("t1","r",encoding="utf-8") as f1, \
open("t2","r",encoding="utf-8") as f2:
print (f1.read())
print (f2.read())
t1
t2
⚠️两个open之间必须以逗号分隔,print必须在with的下一级